home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Deutsche Edition 1
/
Deutsche Edition 1.iso
/
amok
/
051-060
/
amok52
/
abitur
/
txt
/
menus.mod
< prev
next >
Wrap
Text File
|
1993-11-04
|
11KB
|
442 lines
IMPLEMENTATION MODULE Menus;
FROM AbiturScreen IMPORT BACKWindow;
FROM Globals IMPORT AnzahlSpieler, AlleSpieler, Spieler, SpielerPtr;
FROM SYSTEM IMPORT CAST, ADR, LONGSET, BITSET;
FROM Intuition IMPORT Menu, MenuItem, MenuItemPtr, MenuItemFlagSet,
MenuItemFlags, SetMenuStrip, ClearMenuStrip,
IntuiText, IntuiTextPtr, OnMenu, menuEnabled;
FROM FaecherNamen IMPORT FaecherTypen, FaecherNamen;
FROM Exec IMPORT AllocMem, FreeMem, MemReqSet, MemReqs;
FROM Arts IMPORT Assert, TermProcedure, BreakPoint;
FROM Graphics IMPORT DrawModeSet;
FROM Str IMPORT Copy;
(* DEBUG *)
(* FROM InOut IMPORT WriteString, WriteLn; *)
VAR Menu0, Menu1, Menu2, Menu3: Menu;
SaveItem, LoadItem, NewItem, EndeItem, CHItem: MenuItem;
JahrItem: ARRAY[1..4] OF MenuItem;
FachItem: ARRAY[Turnen..Informatik] OF MenuItem;
Dummy : BOOLEAN;
Menu0Text, Menu1Text, Menu2Text, Menu3Text,
SaveItemText, LoadItemText, NewItemText, EndeItemText,
CHItemText, ItemText: IntuiText;
JahrItemText: ARRAY[1..4] OF IntuiText;
JahrName: ARRAY[1..4] OF ARRAY[0..20] OF CHAR;
FachItemText: ARRAY[Turnen..Informatik] OF IntuiText;
SpielerIntuiTextPtr: IntuiTextPtr;
(* Jeder Spieler hat für seinen Namen einen IntuiText *)
PROCEDURE FreeMenu0FromWindow;
BEGIN
ClearMenuStrip(BACKWindow);
BACKWindow^.menuStrip := NIL
END FreeMenu0FromWindow;
PROCEDURE FreeSpielerItems;
VAR Temp : MenuItemPtr;
ITmp : IntuiTextPtr;
BEGIN
WHILE Menu3.firstItem # NIL DO
Temp := Menu3.firstItem;
Menu3.firstItem := Menu3.firstItem^.nextItem;
FreeMem(Temp, SIZE(MenuItem));
END;
WHILE SpielerIntuiTextPtr # NIL DO
ITmp := SpielerIntuiTextPtr;
SpielerIntuiTextPtr := SpielerIntuiTextPtr^.nextText;
FreeMem(ITmp, SIZE(IntuiText))
END
END FreeSpielerItems;
PROCEDURE AppendSpielerItem(VAR Name: ARRAY OF CHAR; i:INTEGER);
(* i: 1... *)
VAR j : INTEGER;
t, TempPtr: MenuItemPtr;
d, TempITextPtr: IntuiTextPtr;
BEGIN
TempPtr := AllocMem(SIZE(MenuItem), MemReqSet{public});
Assert(TempPtr#NIL, ADR("Not enough memory"));
TempITextPtr := AllocMem(SIZE(IntuiText), MemReqSet{public});
IF TempITextPtr = NIL THEN
FreeMem(TempPtr, SIZE(MenuItem));
Assert(FALSE, ADR("Not enough Mem"))
END;
WITH TempPtr^ DO
nextItem := NIL;
leftEdge := 0;
topEdge := 10*i - 10;
width := 120;
height := 10;
flags := MenuItemFlagSet{itemText, itemEnabled, highComp};
mutualExclude := LONGSET{};
itemFill := NIL;
selectFill := NIL;
command := 0C;
subItem := NIL;
nextSelect := 0
END;
WITH TempITextPtr^ DO
frontPen := 4;
backPen := 5;
drawMode := DrawModeSet{};
leftEdge := 0;
topEdge := i * 10 -9; (* (AnzahlSpieler - i) * 10 - 10 *)
iTextFont := NIL;
iText := ADR(Name); (* Sollte gehen, da VAR Parameter *)
nextText := NIL
END;
IF i = 1 THEN
Menu3.firstItem := TempPtr;
SpielerIntuiTextPtr := TempITextPtr;
ELSIF i = 2 THEN
Menu3.firstItem^.nextItem := TempPtr;
SpielerIntuiTextPtr^.nextText := TempITextPtr;
ELSE
t := Menu3.firstItem;
d := SpielerIntuiTextPtr;
FOR j := 1 TO i - 2 DO
t := t^.nextItem;
d := d^.nextText
END;
t^.nextItem := TempPtr;
d^.nextText := TempITextPtr
END
END AppendSpielerItem;
PROCEDURE RefreshSpielerMenu(): BOOLEAN;
VAR i: INTEGER;
AktSp: SpielerPtr;
BEGIN
FreeSpielerItems;
IF AnzahlSpieler > 20 THEN RETURN FALSE END;
IF AnzahlSpieler <=0 THEN RETURN TRUE END;
ClearMenuStrip(BACKWindow);
AktSp:=AlleSpieler;
FOR i := 1 TO AnzahlSpieler DO
AppendSpielerItem(AktSp^.Name, i);
AktSp := AktSp^.Next
END;
Menu3.firstItem^.itemFill := SpielerIntuiTextPtr;
IF SetMenuStrip(BACKWindow, ADR(Menu0)) THEN END;
(* OnMenu(BACKWindow, 0); *)
RETURN TRUE
END RefreshSpielerMenu;
PROCEDURE CH():BOOLEAN;
BEGIN
RETURN checked IN CHItem.flags
END CH;
VAR i: INTEGER;
F: FaecherTypen;
BEGIN (* Menus Initialisierung *)
(*********************************)
(***** M E N U 0 Install *****)
(*********************************)
WITH Menu0 DO
nextMenu := ADR(Menu1);
leftEdge := 0;
topEdge := 0;
width := 48;
height := 10;
flags := BITSET{menuEnabled};
menuName := ADR("GAME");
firstItem := ADR(SaveItem);
jazzX := 0;
jazzY := 0;
beatX := 0;
beatY := 0
END;
WITH SaveItemText DO
frontPen := 3;
backPen := 6;
drawMode := DrawModeSet{};
leftEdge := 0;
topEdge := 1;
iTextFont := NIL;
iText := ADR("SAVE");
nextText := NIL
END;
WITH SaveItem DO
nextItem := ADR(LoadItem);
leftEdge := 0;
topEdge := 0;
width := 80;
height := 10;
flags := MenuItemFlagSet{itemText, commSeq, itemEnabled, highComp};
mutualExclude := LONGSET{};
itemFill := ADR(SaveItemText);
selectFill := NIL;
command := "S";
subItem := NIL;
nextSelect := 0
END;
WITH LoadItemText DO
frontPen := 3;
backPen := 6;
drawMode := DrawModeSet{};
leftEdge := 0;
topEdge := 1;
iTextFont := NIL;
iText := ADR("LOAD");
nextText := NIL
END;
WITH LoadItem DO
nextItem := ADR(NewItem);
leftEdge := 0;
topEdge := 10;
width := 80;
height := 10;
flags := MenuItemFlagSet{itemText, commSeq, itemEnabled, highComp};
mutualExclude := LONGSET{};
itemFill := ADR(LoadItemText);
selectFill := NIL;
command := "L";
subItem := NIL;
nextSelect := 0
END;
WITH NewItemText DO
frontPen := 3;
backPen := 6;
drawMode := DrawModeSet{};
leftEdge := 0;
topEdge := 1;
iTextFont := NIL;
iText := ADR("NEU ");
nextText := NIL
END;
WITH NewItem DO
nextItem := ADR(EndeItem);
leftEdge := 0;
topEdge := 20;
width := 80;
height := 10;
flags := MenuItemFlagSet{itemText, commSeq, itemEnabled, highComp};
mutualExclude := LONGSET{};
itemFill := ADR(NewItemText);
selectFill := NIL;
command := "N";
subItem := NIL;
nextSelect := 0
END;
WITH EndeItemText DO
frontPen := 3;
backPen := 6;
drawMode := DrawModeSet{};
leftEdge := 0;
topEdge := 1;
iTextFont := NIL;
iText := ADR("ENDE");
nextText := NIL
END;
WITH EndeItem DO
nextItem := ADR(CHItem);
leftEdge := 0;
topEdge := 30;
width := 80;
height := 10;
flags := MenuItemFlagSet{itemText, commSeq, itemEnabled, highComp};
mutualExclude := LONGSET{};
itemFill := ADR(EndeItemText);
selectFill := NIL;
command := "E";
subItem := NIL;
nextSelect := 0
END;
WITH CHItemText DO
frontPen := 3;
backPen := 6;
drawMode := DrawModeSet{};
leftEdge := 0;
topEdge := 1;
iTextFont := NIL;
iText := ADR(" CH");
nextText := NIL
END;
WITH CHItem DO
nextItem := NIL;
leftEdge := 0;
topEdge := 40;
width := 80;
height := 10;
flags := MenuItemFlagSet{checkIt,menuToggle,itemText, commSeq,
itemEnabled, highComp};
mutualExclude := LONGSET{};
itemFill := ADR(CHItemText);
selectFill := NIL;
command := "C";
subItem := NIL;
nextSelect := 0
END;
(*********************************)
(***** M E N U 1 Install *****)
(*********************************)
WITH Menu1 DO
nextMenu := ADR(Menu2);
leftEdge := 50;
topEdge := 0;
width := 48;
height := 10;
flags := BITSET{menuEnabled};
menuName := ADR("Pläne");
firstItem := ADR(JahrItem[1]);
jazzX := 0;
jazzY := 0;
beatX := 0;
beatY := 0
END;
FOR i := 1 TO 4 DO
Copy(JahrName[i], " . Jahr");
JahrName[i][0] := CHR(i + ORD("0"));
WITH JahrItemText[i] DO
frontPen := 3;
backPen := 6;
drawMode := DrawModeSet{};
leftEdge := 0;
topEdge := 1;
iTextFont := NIL;
iText := ADR(JahrName[i]);
nextText := NIL
END;
WITH JahrItem[i] DO
IF i = 4 THEN
nextItem := NIL
ELSE
nextItem := ADR(JahrItem[i+1])
END;
leftEdge := 0;
topEdge := i*10-10;
width := 100;
height := 10;
flags := MenuItemFlagSet{itemText, commSeq, itemEnabled, highComp};
mutualExclude := LONGSET{};
itemFill := ADR(JahrItemText[i]);
selectFill := NIL;
command := CHR(ORD("0") + i);
subItem := NIL;
nextSelect := 0
END
END;
(*********************************)
(***** M E N U 2 Install *****)
(*********************************)
WITH Menu2 DO
nextMenu := ADR(Menu3);
leftEdge := 100;
topEdge := 0;
width := 48;
height := 10;
flags := BITSET{menuEnabled};
menuName := ADR("Fach");
firstItem := ADR(FachItem[Turnen]);
jazzX := 0;
jazzY := 0;
beatX := 0;
beatY := 0
END;
FOR F := Turnen TO Informatik DO
WITH FachItemText[F] DO
frontPen := 3;
backPen := 6;
drawMode := DrawModeSet{};
leftEdge := 0;
topEdge := 1;
iTextFont := NIL;
iText := ADR(FaecherNamen[F].VollName);
nextText := NIL
END;
WITH FachItem[F] DO
IF F = Informatik THEN
nextItem := NIL
ELSE
INC(F);
nextItem := ADR(FachItem[F]);
DEC(F)
END;
leftEdge := 0;
topEdge := ORD(F)*10;
width := 120;
height := 10;
flags := MenuItemFlagSet{itemText, itemEnabled, highComp};
mutualExclude := LONGSET{};
itemFill := ADR(FachItemText[F]);
selectFill := NIL;
command := 0C;
subItem := NIL;
nextSelect := 0
END
END;
(*********************************)
(***** M E N U 3 Install *****)
(*********************************)
WITH Menu3 DO
nextMenu := NIL;
leftEdge := 150;
topEdge := 0;
width := 58;
height := 10;
flags := BITSET{menuEnabled};
menuName := ADR("Zeugnis");
firstItem := NIL;
jazzX := 0;
jazzY := 0;
beatX := 0;
beatY := 0
END;
SpielerIntuiTextPtr := NIL;
(* BreakPoint(ADR("In Menus vor SetMenuStrip")); *)
IF SetMenuStrip(BACKWindow, ADR(Menu0)) THEN
END;
(* OnMenu(BACKWindow, 0); *)
TermProcedure(FreeSpielerItems);
TermProcedure(FreeMenu0FromWindow)
END Menus.